Skip to content

Add claude-toolbox marketplace integration (Phase 1)#2

Merged
jaeyeom merged 21 commits into
mainfrom
feat/claude-toolbox-integration
May 7, 2026
Merged

Add claude-toolbox marketplace integration (Phase 1)#2
jaeyeom merged 21 commits into
mainfrom
feat/claude-toolbox-integration

Conversation

@jaeyeom
Copy link
Copy Markdown
Contributor

@jaeyeom jaeyeom commented May 6, 2026

Summary

Phase 1 integration of jaeyeom/claude-toolbox marketplace plugins into ROBOCO CLI. Stack-aware bundle install during roboco init, post-init roboco add toolbox and roboco add toolbox:<plugin>, with an opt-in drop-replace path for plugins that overlap with ROBOCO's own outputs. Phase 2 (replacing ROBOCO defaults with toolbox plugins) is explicitly out of scope.

  • Spec: docs/superpowers/specs/2026-05-04-claude-toolbox-integration-design.md
  • Plan: docs/superpowers/plans/2026-05-04-claude-toolbox-integration.md

What's added

  • Stack-aware bundle resolution (src/core/toolbox-bundles.ts) — CORE_BUNDLE (next-action, todo, gh-issue-resolver, semgrep-review, sandbox-helpers, makefile-workflow) plus stack overlays (TS/JS → biome-vcs-integration, Go → go-dev) and signal overlays (.proto files → protobuf-dev). Four overlap plugins held back from defaults: claude-md, gabyx-githooks-setup, git-guardrails, ci-workflow.
  • Project-scoped settings.json merge (mergeToolboxSettings in generator.ts) — writes extraKnownMarketplaces['claude-toolbox'] and enabledPlugins['<name>@claude-toolbox'], respects explicit user false, warns on conflicting marketplace source.
  • installToolbox(analysis) (installer.ts) — settings-first write, then claude plugin marketplace add, then per-plugin claude plugin install. Partial-success tolerated. Settings.json written first as source of truth so a teammate running roboco install can retry on subprocess failure.
  • installSingleToolboxPlugin(name, targetPath, config) — single-plugin opt-in. For overlapping plugins, prompts user to drop ROBOCO's competing output, writes settings, runs cleanup, records OverrideKey in config.overrides.skipGeneratorOutputs.
  • Generator override hookgenerate(...) accepts options.overrides, skips emit branches matching skipGeneratorOutputs (husky pre-commit, CI workflow, claude deny list, <roboco> block in CLAUDE.md).
  • Interview integrationautoInterview defaults toolbox: true; interactiveInterview shows capability-grouped prompt with stack-aware overlay hints derived from resolveBundle; parseAiResult defaults toolbox: true when AI omits it.
  • Commands: roboco add toolbox (full bundle), roboco add toolbox:<plugin> (single plugin with overlap drop-replace prompt).

Architecture

No new architectural concepts — installToolbox is a peer of installOMC/installHarness in the same installTools router. Settings merge sits next to the existing deepMergeSettings. Override recording (OverrideKey union + RobocoConfig.overrides.skipGeneratorOutputs) is the Phase 2 hand-off mechanism.

Verification

  • 87 unit tests passing across 11 files (8 new test files / suites)
  • Typecheck clean (0 errors)
  • Lint clean (0 errors, 0 warnings)
  • Build succeeds (tsup)
  • Manual smoke test PASSED 2026-05-04: project-level enabledPlugins activates plugins for fresh teammates without ~/.claude/settings.json modification — see "Verification Gate Status" in the plan doc.

Process

13 implementation tasks executed via subagent-driven TDD. Each task went through spec compliance + code quality review. T7, T8, T10, T11 had follow-up commits addressing reviewer feedback before approval. A final whole-branch review surfaced two Important issues (cleanup-after-settings ordering, marketplace conflict warning), both fixed in 84b563a before this PR.

Test plan

  • Reviewer confirms 87 tests pass locally (npm test)
  • Reviewer confirms typecheck clean (npm run typecheck)
  • Reviewer skims src/core/toolbox-bundles.ts for bundle composition
  • Reviewer skims src/core/installer.ts:installSingleToolboxPlugin for overlap drop-replace ordering (settings → cleanup → override → subprocess)
  • Optionally re-runs the manual smoke test from the plan's "Verification Gate Status" section

Out of scope (Phase 2)

Documented in the spec's "Out of Scope" section:

  • Switching ROBOCO's husky pre-commit to gabyx-githooks-setup by default
  • Switching ROBOCO's .github/workflows/vibe-coding-check.yml to ci-workflow by default
  • Auto-invoking the claude-md skill after claude /init
  • Adding git-guardrails deny entries to ROBOCO's default deny list
  • Per-overlap interview questions

Each Phase 2 swap is its own decision and PR.

jaeyeom added 21 commits May 4, 2026 23:16
Phase 1 design for additive claude-toolbox integration: stack-aware
bundle resolution, project-scoped settings.json merge, init/add
surfacing, and overlap-skip default with opt-in drop-replace path
deferred to Phase 2.
Bite-sized TDD-shaped tasks covering type changes, bundle resolution,
settings merge, installer, interview integration, add command (bundle
and single-plugin paths), overlap remediation, generator override
hook, README, and verification smoke test.
ToolSelection.toolbox, RepoSignals.hasProto, RobocoConfig.overrides.
Stack-aware resolveBundle with core/stack/signal overlays and overlap exclusion.
Adds AnalysisResult.signals.hasProto used by toolbox bundle resolution.
Writes extraKnownMarketplaces + enabledPlugins respecting explicit false.
Settings.json written first as source of truth; subprocess install is
convenience for the initiating user.
Threads analysis through installTools so toolbox can read signals and path.
Default true in auto/AI; interactive prompt shows detected stack overlay.
…Result

Issues raised in code review:
- overlay hints derived from resolveBundle/CORE_BUNDLE (single source of truth)
- prompt groups plugins by capability per design spec
- parseAiResult exported and tested for toolbox default-true and explicit-false
Reads analysis from .roboco/config.json, installs bundle, updates config.
Wrap installToolbox in try/catch/finally so filesystem errors fail
the spinner instead of leaking. Distinguish full-success (spinner.succeed)
from partial-success (spinner.warn) based on result.success.
Adds negative-path test for marketplace-add failure.
Recognizes toolbox: prefix, validates against KNOWN_PLUGINS catalog,
installs a single plugin via subprocess. Overlap path is Task 10.
Drop-replace prompt records skipGeneratorOutputs override; cleanup
handlers per overlapping plugin run filesystem removal where applicable.
…ceeds

- Reorder so config.overrides mutation happens after writeProjectSettings,
  preventing half-migrated state on filesystem error.
- Surface deferred-cleanup intent for no-op remediation entries.
- Add regression test asserting override is not persisted when settings
  write fails.
generate() consults config.overrides and skips husky, ci-workflow,
claude-deny-list, or roboco-block emit branches when overridden.
…lete test helper

- Soften the deferred-cleanup user message to reflect Phase 1's
  passive don't-emit behavior (existing entries are not removed).
- Add missing signals field to generator.test.ts makeAnalysis helper.
Add toolbox to Optional artifacts table and Commands table.
Document the verification gate as a manual pre-merge smoke test.
…arning

- Reorder installSingleToolboxPlugin so writeProjectSettings runs before
  destructive cleanup. Prevents the user being left with husky/CI files
  removed but no record of the toolbox plugin if filesystem write fails.
- mergeToolboxSettings now warns when an existing marketplace entry has
  a non-matching source instead of silently leaving it in place.
@jaeyeom jaeyeom requested a review from serithemage May 7, 2026 03:34
@jaeyeom jaeyeom merged commit 7e8071e into main May 7, 2026
6 checks passed
@jaeyeom jaeyeom deleted the feat/claude-toolbox-integration branch May 7, 2026 03:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant